#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

const int N=1e3+5;

int n,m,len,res=0x3f3f3f3f,cnt=0;
vector<pair<int,int>> adj[N];
vector<bool> is_bridge(N,false);
int dfn[N],low[N],f[N];

void dfs(int u,int fa){
    f[u]=fa;
    bool flag=false;
	dfn[u]=low[u]=++len;
	for(auto [v,w]:adj[u]){
		if(dfn[v] == 0){
			dfs(v,u);
			low[u] = min(low[u],low[v]);
			if(low[v] > dfn[u]){
                // cout<<w[u][v]<<'\n';
                is_bridge[v]=true;
			}
		}else{
            if(v != fa || flag) low[u] = min(low[u],dfn[v]);
            else flag = true;
        }
	}
}

void solve(){
    for(int i=0;i<m;i++){
    	int u,v,w1;
    	cin>>u>>v>>w1;
    	adj[u].push_back({v,w1});
    	adj[v].push_back({u,w1});
    }

    for(int i=1;i<=n;i++){
    	if(!dfn[i]) cnt++,dfs(i,0);
    }

    for(int i=1;i<=n;i++){
        if(is_bridge[i]){
            for(auto [v,w]:adj[f[i]]){
                if(v==i)res=min(res,w);
            }
        }
    }

    if(cnt>1){
        cout<<0<<'\n';
    }else{
        if(res==0x3f3f3f3f)res=-1;
        else if(res==0)res=1;
        cout<<res<<'\n';
    }
    res=0x3f3f3f3f;
    len=0;
    cnt=0;

    // for(int i=1;i<=n;i++){
    // 	cout<<dfn[i]<<' ';
    // }
    // cout<<'\n';
    // for(int i=1;i<=n;i++){
    // 	cout<<low[i]<<' ';
    // }
    // cout<<'\n';

    memset(dfn,0,sizeof(dfn));
    memset(low,0,sizeof(low));
    for(int i=1;i<=n;i++){
        adj[i].clear();
    }
}

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);

    while(cin>>n>>m){
    	if(n==0&&m==0)break;
    	solve();
    }
    return 0;
}